波長スペクトルからRGB,sRGBへ-02
1.蛍光などの波長スペクトルを取得
これは,いろいろな手法で,波長スペクトルを取得します.今回は蛍光分光光度計,およびシミュレーションで淑徳しました.
2.XYZ空間に変換,Yで規格化
XYZ空間
これは,私の理解では,
人間の目の感度特性に合わせた波長依存性を考慮に入れた補正
と理解しています.歴史的にみると,マイナスの値があったりややこしいですが,とりあえずは,
CIE 1931 XYZ等色関数
を用いて,補正を掛けます.大元は,CIE,のこのサイト,だと思います.
図示すると,
のようになります.赤の感度が440nmのエリアにもあることが面白いですね.
この補正データを元の波長スペクトルに掛けます.その後,\( \Large \bar{y} \),の値で補正を掛けます.
この理由は,
y(緑)の特性が全体の明るさを示している
したがって,明るさに依存しないRGBの値を求めたいので明るさyで補正を掛ける
とのことらしいです.つまり,
\( \Large \displaystyle X' = \frac{\bar{x}}{\bar{y}} \)
\( \Large \displaystyle Y' = \frac{\bar{y}}{\bar{y}} = 1 \)
\( \Large \displaystyle Z' = \frac{\bar{z}}{\bar{y}} \)
となります.
3.少し補正を掛ける(1/4程度,石島の独断)
プログラムを作成するにあたって,単波長(正規分布),で作成したのですが,後述するように,
XYZをRGBに変換
する際に,0~1,の値に収めて,8ビット,255階調にするために,255倍するのですが,
RGBに変換した時点で1を超えてしまう
ことが多々ありました.これは推測するに,単波長で計算しているから,ということなので,ピーキーな波長特性を持つ場合にはそのようになることがあるらしいです.
今回は,RGBの割合が重要でしたので,1/4,程度の補正を掛けました.
\( \Large \displaystyle X = \frac{1}{4} X' \)
\( \Large \displaystyle Y = \frac{1}{4} Y' \)
\( \Large \displaystyle Z = \frac{1}{4} Z' \)
この操作は,あくまで石島の独断,です.
4.XYZをRGBに変換
変換には,行列式,を使って行います.
\( \Large \displaystyle \begin{pmatrix} R \\ G \\ B \end{pmatrix} = \begin{pmatrix} 3.24045 & -1.53714 & -0.498531 \\ -0.969266 & 1.87601 & 0.041556 \\ 0.0556434 & -0.204026 & 1.05723 \end{pmatrix} \begin{pmatrix} X \\ Y \\ G \end{pmatrix}\)
いろいろな変換値,があるようですが,今回は,代表的な,
A Standard Default Color Space for the Internet - sRGB
Michael Stokes (Hewlett-Packard), Matthew Anderson (Microsoft),
Srinivasan Chandrasekar (Microsoft), Ricardo Motta (Hewlett-Packard)
Version 1.10, November 5, 1996
を使いました(リンクはたぶん,ここ)
5.マイナス値を0に,1以上を1に修正
この計算で問題となってくるのが,
マイナス,1以上の値が計算されてしまう
点です.
例えば,
X=1, Y=1, Z=0 : 1以上
X=0, Y=1, Z=0 : マイナス
となっちゃいます.その場合には,
マイナス:0
1以上:1
に修正します.なので,3.の補正が効いてくるわけです.
6.必要に応じてRGBをsRGBに変換
は次ページに